<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>数据过期 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/retiring-data.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/retiring-data.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/retiring-data.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/retiring-data.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="modeling-your-data.html">数据建模</a></span>
»
<span class="breadcrumb-link"><a href="scale.html">扩容设计</a></span>
»
<span class="breadcrumb-node">数据过期</span>
</div>
<div class="navheader">
<span class="prev">
<a href="index-templates.html">« 索引模板</a>
</span>
<span class="next">
<a href="user-based.html">基于用户的数据 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="retiring-data"></a>数据过期 (Retiring Data)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/55_Retiring_data.asciidoc">edit</a>
</h2>
</div></div></div>
<p>随着时间推移，基于时间数据的相关度逐渐降低。
有可能我们会想要查看上周、上个月甚至上一年度发生了什么，但是大多数情况下，我们只对当前的感兴趣。</p>

<p>按时间范围索引的好处是可以方便地删除旧数据：只需要删除那些变得不重要的索引就可以了。</p>

<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">DELETE /logs_2013*</pre>
</div>
<p>删除整个索引比删除单个文档要更加高效：Elasticsearch 只需要删除整个目录。</p>

<p>但是删除索引是 <em>最后的决定</em> 。在决定完全删除它之前，可以做一些让数据更加优雅地过期的事。</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="migrate-indices"></a>迁移旧索引 (Migrate Old Indices)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/55_Retiring_data.asciidoc">edit</a>
</h3>
</div></div></div>
<p>对日志数据来说，很有可能存在一个<em>热点</em>索引 —— 今日的索引。
所有新文档都会被添加到那个索引，几乎所有查询都以它为目标。那个索引应当使用你最好的硬件。</p>

<p>Elasticsearch 是如何得知哪台是你最好的服务器呢？你可以通过给每台服务器指定任意的标签来告诉它。
例如，你可以像这样启动一个节点：</p>
<pre class="literallayout">./bin/elasticsearch --node.box_type strong</pre>

<p><code class="literal">box_type</code> 参数是完全随意的 —— 只要你喜欢你可以将它随意命名 —— 但你可以用这些任意的值来告诉 Elasticsearch 将一个索引分配至何处。</p>

<p>我们可以通过按以下配置创建今日的索引来确保它被分配到我们最好的服务器上：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">PUT /logs_2014-10-01
{
  "settings": {
    "index.routing.allocation.include.box_type": "strong"
  }
}</pre>
</div>

<p>昨日的索引不再需要我们最好的服务器了，我们可以通过更新索引设置将它移动到标记为 <code class="word">medium</code> 的节点上：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">POST /logs_2014-09-30/_settings
{
  "index.routing.allocation.include.box_type": "medium"
}</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="optimize-indices"></a>索引优化 (Optimize Indices)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/55_Retiring_data.asciidoc">edit</a>
</h3>
</div></div></div>

<p>昨日的索引不大可能会改变。
日志事件是静态的：过去发生的一切都只停留在过去。如果我们将每个分片合并至一个段(Segment)，它会占用更少的资源，能更快的响应查询。
我们可以通过<a class="xref" href="merge-process.html#optimize-api" title="optimize API">optimize API</a>来做到。</p>

<p>对还分配在<code class="word">strong</code>主机上的索引进行优化(optimize)操作将会是一个糟糕的想法，
因为优化操作将消耗节点上大量 I/O 并影响今日日志的索引。但是<code class="word">medium</code>节点的负载根本就不多，我们可以安全地在上面进行优化。</p>

<p>昨日的索引有可能拥有副本分片。如果我们发出一个优化(Optimize)请求，
它会优化主分片和副本分片，这有些浪费。然而，我们可以临时移除副本分片，执行优化，然后再恢复副本分片：</p>

<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">POST /logs_2014-09-30/_settings
{ "number_of_replicas": 0 }

POST /logs_2014-09-30/_optimize?max_num_segments=1

POST /logs_2014-09-30/_settings
{ "number_of_replicas": 1 }</pre>
</div>

<p>当然，没有副本，我们将面临磁盘灾难性故障而丢失数据的风险。你可能想要先通过​<a href="https://www.elastic.co/guide/en/elasticsearch/reference/5.6/modules-snapshots.html" class="ulink" target="_top"><code class="literal">snapshot-restore</code>(快照恢复) API</a>​备份数据。</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="close-indices"></a>关闭旧索引 (Closing Old Indices)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/55_Retiring_data.asciidoc">edit</a>
</h3>
</div></div></div>
<p>当索引变得更“老”，它们到达一个几乎不会再被访问的时间点。
我们可以在这个阶段删除它们，但也许你想将它们留在这里以防万一有人在半年后还想要访问它们。</p>

<p>这些索引可以被关闭。它们还会存在于集群中，但它们不会消耗磁盘空间以外的资源。重新打开一个索引要比从备份中恢复快得多。</p>

<p>在关闭之前，值得我们去刷写(<code class="literal">flush</code>)索引来确保没有事务残留在事务日志中。一个空白的事务日志会使得索引在重新打开时恢复得更快：</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">POST /logs_2014-01-*/_flush <a id="CO292-1"></a><i class="conum" data-value="1"></i>
POST /logs_2014-01-*/_close <a id="CO292-2"></a><i class="conum" data-value="2"></i>
POST /logs_2014-01-*/_open <a id="CO292-3"></a><i class="conum" data-value="3"></i></pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO292-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>刷写(<code class="literal">flush</code>) 1 月份的所有索引来清空事务日志。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO292-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>关闭 1 月份的所有索引.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO292-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>当你需要再次访问它们时，使用 <code class="literal">open</code> API 来重新打开它们。</p>
</td>
</tr>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="archive-indices"></a>归档旧索引 (Archiving Old Indices)<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/410_Scaling/55_Retiring_data.asciidoc">edit</a>
</h3>
</div></div></div>
<p>最后，非常旧的索引可以通过​<a href="https://www.elastic.co/guide/en/elasticsearch/reference/5.6/modules-snapshots.html" class="ulink" target="_top"><code class="literal">snapshot-restore</code> API</a>​归档至长期存储例如共享磁盘或者 Amazon S3，以防日后你可能需要访问它们。
一旦备份完成，我们就可以将索引从集群中删除了。</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="index-templates.html">« 索引模板</a>
</span>
<span class="next">
<a href="user-based.html">基于用户的数据 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>